/*
 * @(#)NetzCanvas.java	  05.09.1997  Robert Denda&Didier Gutacker
 *
 */

import java.awt.* ;

/** 
 * Die Klasse NetzCanvas stellt dem Netzwerk das Zeichenbrett zur Verfuegung
 * Sie ist integriert in ein scollbares Zeichenbrett ScrolledNetworkCanvas
 *
 * @author 	Robert Denda&Didier Gutacker
 * @version     1.1, 05.09.1997
 * @see Netzwerk
 * @see RollCanvas
 */

/**
 *
 * Changes / Enhancements 
 *
 * 1) made class abstract and adopted it to the new structure
 *
 * Changes made by Didier Gutacker in August 1997
 *
 */

public abstract class NetzCanvas extends Canvas {

  // debugging
  debug DEBUG = new debug();

  public Scrollbar verticalScroll, horizontalScroll;
  public int scrollSteps = 50, scrollPageStep = 25;
  public int width;
  public int height;
  public int mouseXPos;
  public int mouseYPos;
  static int nodeWidth = 60, nodeHeight = 60;
  public boolean addLinkFlag;
  public boolean addNodeFlag;
  public boolean removeLinkFlag;
  public boolean removeNodeFlag;
  public boolean stopped = false;
  public boolean startSendingFlag;
  public boolean stopSendingFlag;
  public boolean inspectRoutingTableFlag;

  public SimulationFrame frame;

  public NetzCanvas( Simulation simulation, SimulationFrame frame , int w, int h, Scrollbar verticalScroll,Scrollbar horizontalScroll ) {
    resizeCanvas( w, h );
    this.verticalScroll = verticalScroll;
    this.horizontalScroll = horizontalScroll;
    addLinkFlag = false;
    addNodeFlag = false;
    removeLinkFlag = false;
    removeNodeFlag = false;
    startSendingFlag = false;
    stopSendingFlag = false;
    inspectRoutingTableFlag = false;
    this.frame = frame;
  } // NetzCanvas.NetzCanvas
  
  /**
   * Aendert die Groesse des Zeichenbrettes
   */

  synchronized public void resizeCanvas( int w, int h ) {
    width = w;
    height = h;
    setSize( w, h );
    repaint();
  } // NetzCanvas.resizeCanvas

  /**
   * Signalisiere, dass die "neue Verbindung" Taste gedrueckt wurde
   * @see NetzCanvas#unsetFlags
   * @see NetzCanvas#removeLinkRequest
   * @see NetzCanvas#addNodeRequest
   */

  synchronized public final void addLinkRequest() {
    unsetFlags();
    addLinkFlag = true;
  } // NetzCanvas.addLinkRequest

  /**
   * Signalisiere, dass die "neuer Rechner" Taste gedrueckt wurde
   * @see NetzCanvas#unsetFlags
   * @see NetzCanvas#removeNodeRequest
   * @see NetzCanvas#addLinkRequest
   */

  synchronized public final void addNodeRequest() {
    unsetFlags();
    addNodeFlag = true;
  } // NetzCanvas.addNodeRequest

  /**
   * Signalisiere, dass die "entferne Rechner" Taste gedrueckt wurde
   * @see NetzCanvas#unsetFlags
   * @see NetzCanvas#addNodeRequest
   * @see NetzCanvas#removeLinkRequest
   */

  synchronized public final void removeNodeRequest() {
    unsetFlags();
    removeNodeFlag = true;
  } // NetzCanvas.removeNodeRequest

  /**
   * Signalisiere, dass die "entferne Verbindung" Taste gedrueckt wurde
   * @see NetzCanvas#unsetFlags
   * @see NetzCanvas#addLinkRequest
   * @see NetzCanvas#removeNodeRequest
   */

  synchronized public final void removeLinkRequest() {
    unsetFlags();
    removeLinkFlag = true;
  } // NetzCanvas.removeLinkRequest
  
  /**
   * Signalisiere, dass die "starte Senden" Taste gedrueckt wurde
   * @see NetzCanvas#unsetFlags
   * @see NetzCanvas#stopSendingRequest
   */

  synchronized public final void startSendingRequest() {
    unsetFlags();
    startSendingFlag = true;
  } // NetzCanvas.startSendingRequest

  /**
   * Signalisiere, dass die "stoppe Senden" Taste gedrueckt wurde
   * @see NetzCanvas#unsetFlags
   * @see NetzCanvas#startSendingRequest
   */

  synchronized public final void stopSendingRequest() {
    unsetFlags();
    stopSendingFlag = true;
  } // NetzCanvas.stopSendingRequest

  /**
   * Signalisiere, dass die "Rechner Info" Taste gedrueckt wurde
   * @see NetzCanvas#unsetFlags
   */

  synchronized public final void inspectRoutingTableRequest() {
    unsetFlags();
    inspectRoutingTableFlag = true;
  } // NetzCanvas.inspectRoutingTableRequest

  /**
   * Setze alle Signalisierungen zurueck
   */

  void unsetFlags() {
    addLinkFlag = false;
    addNodeFlag = false;
    removeLinkFlag = false;
    removeNodeFlag = false;
    stopSendingFlag = false;
    startSendingFlag = false;
    inspectRoutingTableFlag = false;
  } // NetzCanvas.unsetFlags


} // NetzCanvas

